/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb;

import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author sp116900
 */
@Stateless
public class GestoreVideogameBean implements GestoreVideogameBeanLocal {
    @EJB
    private VideogameFacadeLocal videogameFacade;
    @EJB
    private VotoFacadeLocal votoFacade;
   
   /**
    * Cerca tutti i Videogames nel Database
    * @return List<Videogame> tutti i Videogames trovati, altrimenti restituisce una lista vuota
    */ 
    @Override
    public List<Videogame> findVideogame(){
        List<Videogame> al=videogameFacade.findAll();
        return al;
    }
    
    /**
    * Cerca un Videogame nel Database dato il suo id
    * @param id id del Videogame 
    * @return Videogame cercato, null altrimenti
    */
    @Override
    public Videogame findVideogame(Long id){
        Videogame al=videogameFacade.find(id);
        return al;
    }   
    /**
     * Cerca il Videogame nel Database
     * @param v Videogame da cercare
     * @return true se il Videogame e' presente nel Database, false altrimenti
     */
    public boolean videogameEsistente(Videogame v){ 
        return videogameFacade.videogameEsistente(v);
    }
   /**
    * Aggiunge un Videogame al Database
    * @param nome nome del Videogame
    * @param genere genere del Videogame
    * @param numGiocatori numero dei giocatori del Videogame
    * @param multiplayer parametro che rappresenta se il Videogame e' in versione multiplayer oppure no
    * @param dataUscita data dell'uscita del Videogame
    * @param piattaforma il nome della piattaforma a cui si riferisce il Videogame
    * @param sviluppatore il sviluppatore del Videogame
    * @param distributore il distributore del Videogame
    * @param voto il voto del Videogame
    * @param img path dell'immagine del Videogame
    * @param pegi pegi del Videogame
    * @return ArticoloNuovo articolo nuovo inserito, null altrimenti
    */ 
    @Override
    public Videogame aggiungiVideogame(String nome, String genere,Integer numGiocatori,boolean multiplayer,Date dataUscita,Piattaforma piattaforma,String sviluppatore,String distributore,Voto voto,String img,String pegi){
    
        Videogame v = new Videogame();
     //   votoFacade.create(voto);
       // List<Voto> voti=votoFacade.findAll();
        
        v.setNome(nome);
        v.setGenere(genere);
        v.setNumeroGiocatori(numGiocatori);
        v.setMultiplayer(multiplayer);
        v.setDataUscita(dataUscita);
        v.setPiattaforma(piattaforma);
        v.setSviluppatore(sviluppatore);
        v.setDistributore(distributore);
        v.setVoto(voto);
        System.out.println("img del videogame aggiunto = " + img);
        v.setImmagineCopertina("./img/"+img);
        v.setPEGI(pegi);
        
        if(!videogameEsistente(v))
            videogameFacade.create(v);
        else v=null;
        
        
        return v;
        
    }
   /* Rimuove un Videogame dal Database
    * @param v Videogame da rimuovere
    * @return true se il Videogame rimosso correttamente, false altrimenti
    */
    @Override
    public boolean eliminaVideogame(Videogame v){
        try{
            //ra ricerca nei due articoli rispetto all'id del videogame e poi cancella
            // e la stessa cosa per la recensione
            videogameFacade.remove(v);
            return true;
        }catch(Exception e){return false;}
    }
   /**
    * Modifica un Videogame dal Database
    * @param id identificativo del Videogame
    * @param nome nome del Videogame
    * @param genere genere del Videogame
    * @param numGiocatori numero dei giocatori del Videogame
    * @param multiplayer parametro che rappresenta se il Videogame e' in versione multiplayer oppure no
    * @param dataUscita data dell'uscita del Videogame
    * @param piattaforma il nome della piattaforma a cui si riferisce il Videogame 
    * @param sviluppatore il sviluppatore del Videogame
    * @param distributore il distributore del Videogame
    * @param voto il voto del Videogame
    * @param img path dell'immagine del Videogame
    * @param pegi pegi del Videogame
    * @return ArticoloNuovo articolo nuovo inserito, null altrimenti
    */  
    @Override
    public void modificaVideogame(Long id,String nome, String genere,Integer numGiocatori,boolean multiplayer,Date dataUscita,Piattaforma piattaforma,String sviluppatore,String distributore,Voto voto,String img,String pegi){
      
        Videogame v  = videogameFacade.getVideogame(id);
        Voto voto2=null;
        v.setGenere(genere);
        v.setNumeroGiocatori(numGiocatori);
        v.setMultiplayer(multiplayer);
        v.setDataUscita(dataUscita);
        v.setSviluppatore(sviluppatore);
        v.setDistributore(distributore);
        voto2=votoFacade.find(voto.getScala(),voto.getValutazione());
        if(voto2==null){
           voto2=voto;
           votoFacade.create(voto);
        }
        v.setVoto(voto2);
        v.setImmagineCopertina("./img/"+img);
        v.setPEGI(pegi);
        
        videogameFacade.edit(v);
    }
    /**
    * Modifica un Videogame dal Database
    * @param id identificativo del Videogame
    * @param nome nome del Videogame
    * @param genere genere del Videogame
    * @param numGiocatori numero dei giocatori del Videogame
    * @param multiplayer parametro che rappresenta se il Videogame e' in versione multiplayer oppure no
    * @param dataUscita data dell'uscita del Videogame
    * @param piattaforma il nome della piattaforma a cui si riferisce il Videogame 
    * @param sviluppatore il sviluppatore del Videogame
    * @param distributore il distributore del Videogame
    * @param img path dell'immagine del Videogame
    * @param pegi pegi del Videogame
    * @return ArticoloNuovo articolo nuovo inserito, null altrimenti
    */ 
    @Override
    public  void modificaVideogame(Long id,String nome, String genere,Integer numGiocatori,boolean multiplayer,Date dataUscita,Piattaforma piattaforma,String sviluppatore,String distributore,String img,String pegi){
      
        Videogame v  = videogameFacade.getVideogame(id);
        v.setGenere(genere);
        v.setNumeroGiocatori(numGiocatori);
        v.setMultiplayer(multiplayer);
        v.setDataUscita(dataUscita);
        v.setSviluppatore(sviluppatore);
        v.setDistributore(distributore);
        v.setImmagineCopertina("./img/"+img);
        v.setPEGI(pegi);
        
        videogameFacade.edit(v);
    }
    /**
    * Cerca tutti i Videogames nel Database in base ad una stringa di ricerca
    * @param nome stringa che rappresenta il nome del Videogame da cercare
    * @return List<Videogame> tutti i Videogames restituiti dalla ricerca
    */ 
    @Override
    public List<Videogame> findVideogame(String nome) {
        return videogameFacade.findVideogames(nome);
    }
}
